package com.example.yupao.exception;

import com.example.yupao.common.ErrorCode;

/**
 * 自定义异常类  之前返回 null 的地方全部改成抛出异常, 会清晰一些
 *
 * @author 宝儿姐
 */
// 全局异常类, 业务自定义的异常
// extends RuntimeException 运行时异常也就是不用显式的去捕获， 不用 throws， try catch
public class BusinessException extends RuntimeException{

    // 封装出我们额外想要传入的参数, 也就是给原本的异常类扩充了两个字段
    // 因为不需要set 异常中的属性 不需要 setter方法 , 所以使用 final, 不可修改
    private final int code;

    private final String description;

    public BusinessException(String message, int code, String description) {
        // 这个就是需要首先调用父类的构造方法
        super(message);
        this.code = code;
        this.description = description;
    }

    // 多写几个构造方法， 说不定会用到
    public BusinessException(ErrorCode errorCode) {
        // super(message);
        super(errorCode.getMessage());

        this.code = errorCode.getCode();
        this.description = errorCode.getDescription();
    }

    /**
     * 传入我们自己的 描述, 而不是预设好 ErrorCode 的 description
     * @param errorCode
     * @param description
     */
    public BusinessException(ErrorCode errorCode, String description) {
        // super(message);
        super(errorCode.getMessage());

        this.code = errorCode.getCode();
        this.description = description;
    }

    public int getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }
}
